#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    printf("main(父)进程(%d)开始执行 \n", getpid());

    pid_t pid = fork();
    if (pid == 0)
    {
        printf("子进程(%d)开始执行\n", getpid());
        // 通过execve执行命令程序  ping -c 3 www.baidu.com
        char *path = "/usr/bin/ping";
        char *argv[] = {path, "-c", "10", "www.baidu.com", NULL}; // 要求argv最后一个元素为NULL
        char *envp[] = {NULL}; // 使用默认环境变量
        // 如果execve执行成功，则不会返回,否则返回-1
        execve(path, argv, envp);
        printf("execve执行失败\n");
        // return -1;
        _exit(-1);
    } else {
        printf("父进程(%d)继续执行\n", getpid());
        // 等待子进程结束
        int result;
        waitpid(pid, &result, 0);
        printf("子进程结束，父进程继续执行，得到子进程的返回值：%d \n", result);
    }

    printf("进程(%d)执行结束 \n", getpid());

    // return 0;
    exit(0);
}
